package com.tq.utils;

import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.Calendar;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import android.util.Log;

/*
 * 用法�?
 *       在程序的入口 �?调用MyLog.init()进行创建文件工作
 *       在想输入的地方，例如:MyLog.i(MyLogger.FILEZEROLOGGER,"functionName","message");
 *       别忘了加权限，见本文�?���? 
 */
public class MyLog {

	// 控制台过滤标�?
	public static final String TAG = "InspurLog";
	// 创建5�?Logger 对象
	public final static Logger fileZeroLogger = Logger.getLogger("fileZero");
	public final static Logger fileOneLogger = Logger.getLogger("fileOne");
	public final static Logger fileTwoLogger = Logger.getLogger("fileTwo");
	public final static Logger fileThreeLogger = Logger.getLogger("fileThree");
	public final static Logger fileFourLogger = Logger.getLogger("fileFour");
	// �?个Logger对象放到数组中去
	public static Logger[] loggerArray = { fileZeroLogger, fileOneLogger,
			fileTwoLogger, fileThreeLogger, fileFourLogger };
	public static Logger logger;
	// 设置文件路径
	public static final String PATH = android.os.Environment
			.getExternalStorageDirectory().getAbsolutePath() + "/InspurLog/";

	/** 是否记录日志 */
	public static final boolean isPrintLog = true;

	public static void init() {
		if (!isPrintLog) {
			return;
		} else {
			// 创建文件夹InspurLog
			initDirectory(PATH);
			// 在文件夹InspurLog下，创建fileZero.log----fileFour.log文件
			initPrintLog(PATH + "fileZero.log", fileZeroLogger);
			initPrintLog(PATH + "fileOne.log", fileOneLogger);
			initPrintLog(PATH + "fileTwo.log", fileTwoLogger);
			initPrintLog(PATH + "fileThree.log", fileThreeLogger);
			initPrintLog(PATH + "fileFour.log", fileFourLogger);
		}
	}

	public static void initPrintLog(String fileNum, Logger logger) {
		try {
			// 把日志信息写到一个文�?
			FileHandler appHandler = new FileHandler(fileNum, 1024 * 1000, 1, true);
			appHandler.setFormatter(new TextFormatter());// 新建�?��格式类，指定文件的输出类�?
			logger.setLevel(java.util.logging.Level.ALL); // 设置日志级别
			logger.addHandler(appHandler);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e(TAG, e.getMessage());
		}
	}

	public enum MyLogger {
		
		FILEZEROLOGGER, FILEONELOGGER, FILETWOLOGGER, FILETHREELOGGER, FILEFOURLOGGER
	}

	/**
	 * info级别日志
	 * 
	 * 控制台标签为InspurLog
	 * 
	 * @param fileNum
	 *            选择输出的文件名，{MyLogger.常量值}，如果超出范围，默认�?
	 * @param functionName
	 *            请输入函数名�?
	 * @param message
	 *            消息
	 */
	public static void i(MyLogger myLogger, String functionName, String message) {
		// 根据输入的数字从数组loggerArray中取得Logger对象
		 switch (myLogger) { 
         case FILEZEROLOGGER: 
        	logger =  loggerArray[0];
             break; 
         case FILEONELOGGER: 
            logger = loggerArray[1];
             break; 
         case FILETWOLOGGER: 
        	 logger = loggerArray[2];
             break; 
         case FILETHREELOGGER: 
        	 logger = loggerArray[3];
             break; 
         case FILEFOURLOGGER: 
        	 logger = loggerArray[4];
             break;  
         default: 
        	 logger =  loggerArray[0];
            break;
     } 
		if (isPrintLog && null != logger) {
			// 将信息打印到 手机文件�?
			logger.info(functionName + "   " + message);

			Log.i(TAG, "[ Module�?" + functionName + " ]" + message);

		}
	}

	// 创建文件
	public static void initDirectory(String path) {

		File f = new File(path);

		if (!f.exists()) {

			f.mkdir();
		}

	}
	// 设置输出格式
	public static class TextFormatter extends Formatter {

		public TextFormatter() {
		}

		@Override
		public String format(LogRecord record) {
			// 当前时间+消息+换行�?
			return getCurrentTime() + " " + record.getMessage() + "\r\n";
		}
	}

	// 获取当前时间
	public static String getCurrentTime() {

		return MessageFormat.format("{0,date,yyyy-MM-dd HH:mm:ss}",
				new Object[] { new java.sql.Date(System.currentTimeMillis()) });
	}
}

// <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
// <uses-permission
// android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

